package com.alpaak.provider.api;

import com.alpaak.provider.api.impl.HelloServiceImpl;
import com.alpaak.service.AnnotationService;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;

import java.io.IOException;

/**
 * @author alpaak
 * @des: 服务提供者api
 * @date 2020/4/6 10:05
 */
public class AppProvider {
    public static void main(String[] args) throws IOException {

        AnnotationService anno = new HelloServiceImpl();
        // 当前应用配置
        ApplicationConfig application = new ApplicationConfig();
        application.setName("anno-provider");

// 连接注册中心配置
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("zookeeper://192.168.1.99:2181");
//        registry.setUsername("aaa");
//        registry.setPassword("bbb");

// 服务提供者协议配置
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(12345);
        protocol.setThreads(200);

// 注意：ServiceConfig为重对象，内部封装了与注册中心的连接，以及开启服务端口

// 服务提供者暴露服务配置
        ServiceConfig<AnnotationService> service = new ServiceConfig<AnnotationService>(); // 此实例很重，封装了与注册中心的连接，请自行缓存，否则可能造成内存和连接泄漏
        service.setApplication(application);
        service.setRegistry(registry); // 多个注册中心可以用setRegistries()
        service.setProtocol(protocol); // 多个协议可以用setProtocols()
        service.setInterface(AnnotationService.class);
        service.setRef(anno);
        service.setVersion("1.0.0");

// 暴露及注册服务
        service.export();
        System.in.read();
    }
}
